from django import template
from django.db.models.aggregates import Count
from ..models import Post, Category, Tag

# 实例化了一个 template.Library 类
register = template.Library()


# 将函数 get_recent_posts 装饰为 register.simple_tag
@register.simple_tag
# 获取数据库中前 num 篇文章，这里 num 默认为 5
# 最新文章模板标签
def get_recent_posts(num=5):
    return Post.objects.all().order_by('-created_time')[:num]


@register.simple_tag
# 归档模板标签
def archives():
    # dates 方法会返回一个列表, date 对象，精确到月份，降序排列
    return Post.objects.dates('created_time', 'month', order='DESC')


@register.simple_tag
# 分类模板标签
def get_categories():
    return Category.objects.annotate(num_posts=Count('post')).filter(
        num_posts__gt=0)


@register.simple_tag
def get_tags():
    # 标签云
    return Tag.objects.annotate(num_posts=Count('post')).filter(
        num_posts__gt=0)
